import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
  Query,
  ParseIntPipe,
  UseGuards,
  Req
} from '@nestjs/common'
import { UserService } from './user.service'
import { CreateUserDto } from './dto/create-user.dto'
import { UpdateUserDto } from './dto/update-user.dto'
import { ResponseMsg } from 'src/common/custom.decorator'
import { BindRoleDto } from 'src/auth/role/dto/create-role.dto'
import { LoggerGuard } from 'src/logger/logger.guard'
import { EasyRequest, KeywordPageQuery } from 'types/global'
// import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'

@Controller('user')
// @ApiTags('用户模块')
export class UserController {
  constructor(private readonly userService: UserService) {}

  /**
   * 创建新用户
   * @param createUserDto - 包含新用户信息的数据传输对象
   * @returns 创建的用户信息
   */
  @Post('create')
  @ResponseMsg('添加用户')
  @UseGuards(LoggerGuard)
  // @ApiOperation({ summary: '创建用户' })
  // @UsePipes(new ValidationPipe())
  create(@Body() createUserDto: CreateUserDto, @Req() req: EasyRequest) {
    return this.userService.create(createUserDto, req.user?.userId)
  }

  // @ApiOperation({ summary: '分页查询' })
  // @ApiQuery({
  //   name: 'keyword',
  //   description: '关键词',
  //   required: false,
  //   default: ''
  // })
  // @ApiQuery({
  //   name: 'pageNum',
  //   description: '页码',
  //   required: false,
  //   default: 1
  // })
  // @ApiQuery({
  //   name: 'pageSize',
  //   description: '页数',
  //   required: false,
  //   default: 10
  // })
  /**
   * 分页查询用户列表
   * @param query - 查询参数，包括关键词、页码和每页大小
   * @returns 符合条件的用户列表
   */
  @Get('list')
  @ResponseMsg('查询用户列表')
  findAll(@Query() query: KeywordPageQuery) {
    return this.userService.findAll(query)
  }

  /**
   * 根据ID查询单个用户
   * @param id - 用户ID
   * @returns 用户信息
   */
  @Get('detail')
  @ResponseMsg('查询用户信息')
  findOne(@Query('id') id: string) {
    return this.userService.findOne(+id)
  }

  /**
   * 更新用户信息
   * @param id - 用户ID
   * @param updateUserDto - 包含更新信息的数据传输对象
   * @returns 更新后的用户信息
   */
  @Patch('update')
  @ResponseMsg('更新用户信息')
  @UseGuards(LoggerGuard)
  update(@Body() updateUserDto: UpdateUserDto, @Req() req: EasyRequest) {
    return this.userService.update(updateUserDto, req.user?.userId)
  }

  /**
   * 删除用户
   * @param id - 用户ID
   * @returns 删除结果信息
   */
  @Delete('delete')
  @ResponseMsg('删除用户')
  @UseGuards(LoggerGuard)
  remove(@Query('id') id: string) {
    return this.userService.remove(+id)
  }

  /**
   * 绑定角色给用户
   * @param bindRole - 包含用户ID和角色ID的数据传输对象
   * @returns 绑定结果信息
   */
  @Post('bindRole')
  @ResponseMsg('绑定角色')
  @UseGuards(LoggerGuard)
  bindRole(@Body() bindRole: BindRoleDto) {
    return this.userService.bindRole(bindRole)
  }

  @Post('resetPassword/:id')
  @ResponseMsg('重置密码')
  @UseGuards(LoggerGuard)
  resetPassword(@Param('id', ParseIntPipe) id: number) {
    return this.userService.resetPassword(id)
  }
}
